import numpy as np
def numerical_gradient(f,x):
    h=1e-4
    grad=np.zeros_like(x) #生成一个型状和x相同，所有元素都是0的数组
    for idx in range(x.size):
        tmp_val=x[idx]
        #f(x+h)
        x[idx]=tmp_val+h
        fxh1=f(x) #这里的x是一个数组x=[x[0]+h,x[1]]
        #f(x-h)
        x[idx]=tmp_val-h
        fxh2=f(x)   #x=[x[0]-h,x[1]]

        grad[idx]=(fxh1-fxh2)/(2*h)
        x[idx]=tmp_val  #把x的值给还原了,因为此时的x[0]=x[0]-h
    return grad   
def function_2(x):
    return x[0]**2+x[1]**2 
print(numerical_gradient(function_2,np.array([3.0,4.0])))
print(numerical_gradient(function_2,np.array([0.0,2.0])))
print(numerical_gradient(function_2,np.array([3.0,0.0])))
